#ifndef QQ_SQL_DATABASE
#define QQ_SQL_DATABASE

#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qvariant.h>
#include <qmetaobject.h>
#include <qmutex.h>
#include <qpushbutton.h>

class QQSqlDatabase
{
public:
	static QQSqlDatabase* getInstance();
	void init();

	void setDriverName(const QString& s);
	QString getDriverName() const;
	void setConnectOptions(const QString& s);
	QString getConnectOptions() const;
	void setDatabaseName(const QString& s);
	QString getDatabaseName() const;
	void setUserName(const QString& s);
	QString getUserName() const;
	void setPassword(const QString& s);
	QString getPassword() const;
	void setHostName(const QString& s);
	QString getHostName() const;
	void setPort(int i);
	int getPort() const;

	template <class T>
	void registerMetaType();

	void createTable(const QString& id, const QString& relation, const QStringList& key, const QString& name = QString());
	void createTable(const QStringList& ids, const QString& name = QString());
private:
	QMutex mMutex;
	QSqlDatabase* mDatabase;
	//propertyType, sqlType
	QMap<QString, QString> mSqlTypeMap;

	QString mDriverName;
	QString mConnectOptions;
	QString mDatabaseName;
	QString mUserName;
	QString mPassword;
	QString mHostName;
	int mPort;

	//className, propertyName, propertyType
	QMap<QString, QMap<QString, QString>> mMetaTypeMap;
	//className,tabelName
	QMap<QString, QString> mMetaTable;
};

#endif // !QQ_SQL_DATABASE